// pages/order/order.js
/*
1. 由于订单页面会被频繁的打开观察，此处应用 onShow() 的生命周期函数进行调用
  0. onShow 不同与 onLoad 无法再形参上接收 options 参数
  0.5 判断缓存中有没有token 
    0.5.1 没有直接跳转到授权页面
    0.5.2 有 直接往下进行
  1.1 获取 url 上的参数 type
    1.1.0 根据 type 值来决定页面标题的数组元素 那个被激活选中
  1.2 根据 type 去发送请求获取订单数据
  1.3 渲染页面

2. 点击不同的标题时，也需要重新发送请求进行渲染数据

*/

import { request } from "../../request/index.js";
import regeneratorRuntime from "../../lib/runtime/runtime";

Page({
  /**
   * 页面的初始数据
   */
  data: {
    orders: [],
    tabs: [
      {
        id: 0,
        value: "全部订单",
        isActive: true,
      },
      {
        id: 1,
        value: "待付款",
        isActive: false,
      },
      {
        id: 2,
        value: "待发货",
        isActive: false,
      },
      {
        id: 3,
        value: "退款/退货",
        isActive: false,
      },
    ],
  },

  // onShow()生命周期函数
  onShow(options) {
    const token = wx.getStorageSync("token");
    if (!token) {
      wx.navigateTo({
        url: "/pages/auth/auth",
      });
      return;
    }

    // 测试
    // console.log(options);
    // 1. 先获取当前小程序的页面栈-数组 长度最大10个页面
    let pages = getCurrentPages();
    // console.log(pages);
    // 2. 数组中 索引最大的页面就是当前页面
    let currentPage = pages[pages.length - 1];
    // console.log(currentPage.options);

    // 3.获取url 上的type 参数
    const { type } = currentPage.options;
    // 4.激活选中页面标题 当 type = 1, index = 0
    this.changeTitleByIndex(type - 1);
    this.getOrders(type);
  },

  // 获取订单列表的方法
  async getOrders(type) {
    const res = await request({ url: "/my/orders/all", data: { type } });
    // 因为没有 专有的appid测试号，则无法获取token 此地方的获取无效
    // console.log(res);
    this.setData({
      orders: res.orders.map((v) => ({
        ...v,
        create_time_cn: new Date(v.create_time * 1000).toLocaleString(),
      })),
    });
  },

  //  标题点击事件 从子组件传递出来
  // 根据标题索引选中激活相对的数组
  changeTabsItemChange(e) {
    let { tabs } = this.data;
    tabs.forEach((v, i) =>
      i === index ? (v.isActive = true) : (v.isActive = false)
    );
    //3. 赋值到 data中
    this.setData({
      tabs,
    });
  },

  handleTabsItemChange(e) {
    // console.log(e);
    // 1. 获取被点击的标题索引
    const { index } = e.detail;
    // 2. 修改源数组
    this.changeTabsItemChange(index);
    // 3. 重新发送请求 type = 1  index = 0
    this.getOrders(index + 1);
  },
});
